{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用 TensorFlow 搭建神经网络预测泰坦尼克号乘客生存率\n",
    "\n",
    "比赛地址：[Titanic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic)\n",
    "\n",
    "比赛内容：给定大量泰坦尼克号的乘客信息数据，要求预测乘客是否生存\n",
    "\n",
    "比赛思路：典型的二分类问题，本文搭建多层感知机（MLP）解决\n",
    "\n",
    "本文将从以下几方面介绍解决方案：\n",
    "1. 添加库\n",
    "2. 定义全局变量\n",
    "3. 加载数据文件\n",
    "4. **数据可视化**\n",
    "5. **清洗数据**\n",
    "6. **特征工程**\n",
    "7. **搭建神经网络（前向传播）**\n",
    "8. **训练（反向传播）**\n",
    "9. **测试模型效果 && 生成提交结果**\n",
    "\n",
    "## 1. 添加库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import model\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 定义全局变量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data_file = r'./data/train.csv'\n",
    "test_data_file = r'./data/test.csv'\n",
    "test_label_file = r'./data/gender_submission.csv'\n",
    "model_save_path = r'./ckpt/model'\n",
    "output_file = r'./result.csv'\n",
    "\n",
    "learning_rate = 0.001\n",
    "BATCH_SIZE = 20\n",
    "\n",
    "input_size = 11\n",
    "hidden_size = 20\n",
    "output_size = 2\n",
    "\n",
    "epoch = 2000\n",
    "KEEP_PROB = 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 加载数据文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(train_data_file, \n",
    "    sep=',', \n",
    "    dtype={\n",
    "        'Name' : 'str',\n",
    "        'Survived' : 'int64',\n",
    "        'Pclass' : 'float32',   \n",
    "        'Sex' : 'str',\n",
    "        'Age' : 'float32',\n",
    "        'SibSp' : 'float32',\n",
    "        'Parch' : 'float32',\n",
    "        'Fare' : 'float32',\n",
    "        'Embarked' : 'str',\n",
    "    }\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.250000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.283302</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.925000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.099998</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.050000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.458300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>17463</td>\n",
       "      <td>51.862499</td>\n",
       "      <td>E46</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.075001</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.133300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>2.0</td>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>237736</td>\n",
       "      <td>30.070801</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0     3.0   \n",
       "1            2         1     1.0   \n",
       "2            3         1     3.0   \n",
       "3            4         1     1.0   \n",
       "4            5         0     3.0   \n",
       "5            6         0     3.0   \n",
       "6            7         0     1.0   \n",
       "7            8         0     3.0   \n",
       "8            9         1     3.0   \n",
       "9           10         1     2.0   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0    1.0   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0    1.0   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0    0.0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0    1.0   \n",
       "4                           Allen, Mr. William Henry    male  35.0    0.0   \n",
       "5                                   Moran, Mr. James    male   NaN    0.0   \n",
       "6                            McCarthy, Mr. Timothy J    male  54.0    0.0   \n",
       "7                     Palsson, Master. Gosta Leonard    male   2.0    3.0   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0    0.0   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.0    1.0   \n",
       "\n",
       "   Parch            Ticket       Fare Cabin Embarked  \n",
       "0    0.0         A/5 21171   7.250000   NaN        S  \n",
       "1    0.0          PC 17599  71.283302   C85        C  \n",
       "2    0.0  STON/O2. 3101282   7.925000   NaN        S  \n",
       "3    0.0            113803  53.099998  C123        S  \n",
       "4    0.0            373450   8.050000   NaN        S  \n",
       "5    0.0            330877   8.458300   NaN        Q  \n",
       "6    0.0             17463  51.862499   E46        S  \n",
       "7    1.0            349909  21.075001   NaN        S  \n",
       "8    2.0            347742  11.133300   NaN        S  \n",
       "9    0.0            237736  30.070801   NaN        C  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "乘客信息说明：\n",
    "* PassengerId => 乘客ID\n",
    "* Pclass => 客舱等级(1/2/3等舱位)\n",
    "* Name => 乘客姓名\n",
    "* Sex => 性别\n",
    "* Age => 年龄\n",
    "* SibSp => 兄弟姐妹数/配偶数\n",
    "* Parch => 父母数/子女数\n",
    "* Ticket => 船票编号\n",
    "* Fare => 船票价格\n",
    "* Cabin => 客舱号\n",
    "* Embarked => 登船港口"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102744</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329224</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  714.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.699118    0.523008   \n",
       "std     257.353842    0.486592    0.836071   14.526497    1.102744   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000   20.125000    0.000000   \n",
       "50%     446.000000    0.000000    3.000000   28.000000    0.000000   \n",
       "75%     668.500000    1.000000    3.000000   38.000000    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693428  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329224  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成简要的统计信息\n",
    "# count  - 数量\n",
    "# mean   - 均值\n",
    "# std    - 标准差\n",
    "# min    - 最小值\n",
    "# 25%    - 下四分位\n",
    "# 50%    - 中位数\n",
    "# 75%    - 上四分位\n",
    "# max    - 最大值\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sex     Survived\n",
       "female  0            81\n",
       "        1           233\n",
       "male    0           468\n",
       "        1           109\n",
       "Name: Survived, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 性别与是否生存的关系 Sex\n",
    "data.groupby(['Sex','Survived'])['Survived'].count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1584c1d0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data[['Sex','Survived']].groupby(['Sex']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass  Survived\n",
       "1.0     0            80\n",
       "        1           136\n",
       "2.0     0            97\n",
       "        1            87\n",
       "3.0     0           372\n",
       "        1           119\n",
       "Name: Pclass, dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 船舱等级和生存与否的关系 Pclass\n",
    "data.groupby(['Pclass','Survived'])['Pclass'].count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x178fa9e8>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEQCAYAAABLMTQcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAFAZJREFUeJzt3X+w3XWd3/Hny5sALkEdk1utSeBmNU7NiuAQg47jNsO6GEYn7IzEBLsiM6xRaJSObWdjt7IMVWtZp7tIaUu2OlgHJiB2asRsmelaXYtAc68G3ICpEVlzDbubgOBExCT67h/3QK/XS+65N+fm5H7yfMxk5nw+38/5nvfJybzyOZ/z/ZGqQpLUlhf0uwBJUu8Z7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGzevXCy9atKiGhob69fKSNCeNjIwcqKrBqcb1LdyHhoYYHh7u18tL0pyU5G+6GeeyjCQ1yHCXpAYZ7pLUoL6tuUtq3+HDhxkdHeWZZ57pdylzzmmnncaSJUuYP3/+jJ5vuEuaNaOjo5xxxhkMDQ2RpN/lzBlVxeOPP87o6CjLli2b0T5clpE0a5555hkWLlxosE9TEhYuXHhM33gMd0mzymCfmWP9ezPcJalBrrlLOm6GNn+lp/t79JNv72rcxz/+cW677TYGBgZ4wQtewM0338z5559/TK+9bds2HnroITZv3nxM+wFYsGABBw8ePOb9jHfShHuv/1GdaLr9Ry6dbO69917uuusuvvWtb3Hqqady4MABDh061NVzjxw5wrx5k8fk2rVrWbt2bS9L7SmXZSQ17bHHHmPRokWceuqpACxatIhXvOIVDA0NceDAAQCGh4dZvXo1ANdeey0bN27kwgsv5LLLLuP8889n165dz+1v9erVjIyMcMstt7Bp0yaeeuophoaG+OUvfwnA008/zdKlSzl8+DDf//73WbNmDeeddx5vectb+O53vwvAD37wA970pjfxhje8gY9+9KOz8r4Nd0lNu/DCC9m7dy+vfvWrueqqq/j6178+5XNGRkb40pe+xG233caGDRu44447gLH/KPbt28d555333NgXv/jFnHPOOc/t98tf/jJve9vbmD9/Phs3buTGG29kZGSET33qU1x11VUAXH311Vx55ZXs2LGDl7/85bPwrg13SY1bsGABIyMjbNmyhcHBQdavX88tt9xy1OesXbuWF77whQC8613v4gtf+AIAd9xxB+vWrfu18evXr+f2228HYOvWraxfv56DBw/yzW9+k3Xr1nHuuefy/ve/n8ceewyAe+65h0svvRSA97znPb16q7/ipFlzl3TyGhgYYPXq1axevZqzzz6bz33uc8ybN++5pZSJx5Offvrpzz1evHgxCxcu5MEHH+T222/n5ptv/rX9r127lo985CM88cQTjIyMcMEFF/DTn/6Ul7zkJezcuXPSmmb7EFFn7pKatnv3br73ve891965cydnnXUWQ0NDjIyMAPDFL37xqPvYsGED119/PU899RRnn332r21fsGABq1at4uqrr+Yd73gHAwMDvOhFL2LZsmXPzfqrigceeACAN7/5zWzduhWAW2+9tSfvc6KuZu5J1gA3AAPAf6mqT04y5l3AtUABD1TVu3tYp6QG9OOoroMHD/LBD36QJ598knnz5vGqV72KLVu28PDDD3PFFVfwiU98YsrDIi+55BKuvvrqo/74uX79etatW8fXvva15/puvfVWrrzySj72sY9x+PBhNmzYwDnnnMMNN9zAu9/9bm644Qbe+c539uqt/opU1dEHJAPA/wV+FxgFdgCXVtVD48YsB+4ALqiqHyf5B1X190fb78qVK+t43qzDQyGl4+/hhx/mNa95Tb/LmLMm+/tLMlJVK6d6bjfLMquAPVX1SFUdArYCF08Y8z7gpqr6McBUwS5Jml3dhPtiYO+49minb7xXA69Ock+S+zrLOJKkPulmzX2yn3QnruXMA5YDq4ElwDeSvLaqnvyVHSUbgY0AZ5555rSLlTT3VJUXD5uBqZbMp9LNzH0UWDquvQTYN8mYL1XV4ar6AbCbsbD/FVW1papWVtXKwcEpb94taY477bTTePzxx485qE42z17P/bTTTpvxPrqZue8AlidZBvwI2ABMPBLmvwOXArckWcTYMs0jM65KUhOWLFnC6Ogo+/fv73cpc86zd2KaqSnDvaqOJNkE3M3YoZCfrapdSa4DhqtqW2fbhUkeAn4B/MuqenzGVUlqwvz582d8JyEdm66Oc6+q7cD2CX3XjHtcwIc7fyRJfeYZqpLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lq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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data[['Pclass','Survived']].groupby(['Pclass']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x179714a8>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 船舱等级 && 性别 和生存与否的关系 Pclass && Sex\n",
    "data[['Sex','Pclass','Survived']].groupby(['Pclass','Sex']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x179a3c18>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 915.875x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 不同年龄下的是否生存的分布情况：\n",
    "\n",
    "facet = sns.FacetGrid(data, hue=\"Survived\",aspect=4)\n",
    "facet.map(sns.kdeplot,'Age',shade= True)\n",
    "facet.set(xlim=(0, data['Age'].max()))\n",
    "facet.add_legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABCYAAAHwCAYAAAB69G6qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XecXGeV5//P6RyVc7BlnHDCBmQTbQwGDMYIlgFssz9shvmNmQF2mLjDzG9ZPDvD/MwsswzYDLbBM5KDgrNs4yBbtmUhyUE5dSu2QrdaUner1VKH6krP/nFvSZ1jVd3qqu/79dKru6pu3Xuqulv31LnPcx5zziEiIiIiIiIiEoS8oAMQERERERERkdylwoSIiIiIiIiIBEaFCREREREREREJjAoTIiIiIiIiIhIYFSZEREREREREJDAqTIiIiIiIiIhIYFSYEBkhM7vezGqDjmMkzOxbZvb7oOMYi8zsv5rZihTsd8z+PomIiPTFzBaa2T8FHcdYZGb3mdmPUrDfu8zskWTvV2S0VJgQAczsgJl1mFmrmR0zs/80s4qg4wqSmZX778cLQccyGDObY2ZPmlmjmbWY2TYz+1YqjuWce9Q599lU7FtERKQ/ZvZxM1vrn+dOmNkaM7s66LhGyy/MOzP770HHMph0/gycc3/inPvHVOxbJBOpMCFy1hedcxXAB4Crgf8RcDxB+yrQCXzWzGYGHcwgHgYOA+cCk4HbgWMj2ZGZFSQxLhERkVEzs3HA88A9wCRgNvAPeOfpse4O4IT/NWMl82dgHn0OE+lCfxAiPTjn6oAXgcsBzGySP4LiiJk1m9kzfT3PzH5oZvvM7LSZ7TSz/9LlsQvMbJVfYW80s2X+/WZmPzez4/5jW83s8n72/4dmVuXvf7+ZfafLY9ebWa2Z/ZW/r3oz+8Muj082s2fN7JSZvQOcP4S34g7gPmAr8F97xPIBM9vkx/K4mS3rOlTTzG42s81mdtK/svC+fl7TfWb2sx73LTezv/S//1szq/OPs8vMbugn1quBhc65Nudc1Dm3yTn3Ytf3pscxDpjZp/3v7zKzJ8zsETM7Bfy9P3pmUpft3+//3Aq7ToMZQvyz/JEcDWZWY2Z/1mW7UvOGuDab2U7/NYiIiPTlIgDn3BLnXMw51+GcW+Gc25rYwMy+7ecJzWb2spmd69//Uf8cNte/faV/fn5vXwcys1+Y2WE/Z9hgZtd2eewuM3vMzB7yz807zGx+l8ffb2Yb/ceWASUDvSgzK8O7EPI94MKu+/Ifv93MDppZk5n9qMf5O69L7tXkxzWpj8Pgvy83d7ld4L8nHzCzEj8HaPLfl3fNbPpwfwbWY4qEmc0zbyRIgX/7DTP7iZmtAdrx8o31PeL8CzN71v/+zDSYgeL3b3/Yz7dOmtkWM7u+y7bnmZeDnjazV4ApA/1MRIKiwoRID/6J+yZgk3/Xw0AZcBkwDfh5P0/dB1wLjMeroD9iZ0ca/COwApgIzMGrtgN8FrgO72Q3AbgFaOpn/8eBm4FxwB8CP0+ckHwz/GPPBv4I+JWZTfQf+xUQAmYC3/b/DfQenANcDzzq/7u9y2NFwNPAQrwrBkuArkWYDwD/AXwHb/TC/cCzZlbcx6EWA7eYmfnPnei/J0vN7GLg+8DVzrlK4EbgQD8hv+W/3lv92IfrS8ATeD+D/w2sA/6gy+PfAJ5wzkWGEX8e8BywBe9ncgPw52Z2o//cH+MViM73X1tGXykSEZFA7QZiZrbIzD7f5fwOgJl9Gfh74CvAVGA13vkZ59xavHPxIjMrxctr/odzrrqfY70LXIV3jl8MPG5mXQsMC4CleOfMZ4F7/RiKgGf8/U8CHqf7ubQvfwC0+tu+TPd841Lg3/EujszkbI6T8GfAl4FPALOAZrx8py9LgNu63L4RaHTObcQ7/44H5uLlLX8CdPSxjwF/BkP0TeBOoBIvF7zYzC7s8vg38N7zIcdvZrOB3wH/hPe+/zXwpJlN9bddDGzAK0j8I8o3JEOpMCFy1jNmdhL4PbAK+Ge/sPB54E+cc83OuYhzblVfT3bOPe6cO+KcizvnlgF7gGv8hyN40wxmOedCzrnfd7m/EngvYM65KudcfT/7/51zbp/zrMIrdFzbZZMI8L/8GF/AO9FfbGb5eCf+/+mPKNgOLBrkvbgd2Oqc24l3MrzMzN7vP/ZhoAD4pX+sp4B3ujz3j4H7nXNv+1cUFuENc/xwH8dZDbgur+OrwDrn3BEgBhQDl5pZoXPugHNuXz/xfs3f14+AGvNGawxnBMI659wz/s+uA+8kfht4o1qAW+k7URgo/quBqc65/+WcCzvn9gO/8fcF8HXgJ865E865w8AvhxGviIjkEOfcKeDjeOec3wAN5o2ETFzZ/w7w//t5RBT4Z+CqxKgJ4C68D9/vAEfo/wM8zrlHnHNN/gjEf8U7F1/cZZPfO+decM7F8IoQV/r3fxgoBP7Nzw+ewCtyDOQOYJm/r8XAbWZW6D/2VeA559zvnXNh4H/6rz/hO8D/55yrdc51+q/xq9b3lMzFwAJ/hAZ0LwBE8AoSF/h5ywb//e75vgz2MxiKhc65Hf572wIs52y+cSFePvjsMOP/f4AX/J9J3Dn3CrAeuMm/WHM18CPnXKdz7k28iyYiGUeFCZGzvuycm+CcO9c5913/A+pc4IRzrnmwJ/vDDRPTF07iTQVJDJf774AB7/jDHr8N4Jx7De9Kw6+AY2b2gHlzGPva/+fN7C3zmi2dxBvV0XU4XpOfjCS0AxV4V04K8HowJBwc5OXcjjdSAv9D9irOVthnAXXOua7JQdd9nwv8VeJ98GOd6z+vG38fSzl7FeAbXY67F/hzvETjuJktNbNe+/C3bXbO/dA5dxkwHdiMV2iyQV5nX/GDN3riI/7xrsNLQlYPJ378QlSP9+Hv/fjAez+G8zMREZEc5hcdvuWcm4OXY8wC/s1/+FzgF13ONyfw8o7Z/nMjeCMdLwf+tcc5vBvzpoVWmTfF9CReQaNrvnG0y/ftQIlfDOgrP+j33OaPUP0kZ8+by/GmfnzBv93tPOmca6f7qNJzgae7vOYqvIsavQoFfk5RBXzR/3C/gLMf7B/GG62x1Lxpu//SpTjScz8D/QyGome+ceZCCF4O8Yz/OocT/7nA13rkGx/HG2UyC2h2zrV12Z3yDclIKkyIDOwwMMnMJgy0kX9F4jd4Uw8mO+cmANvxkgKcc0edc3/snJuFV+H/dzO7wH/sl865D+JNFbkI+Js+9l8MPAn8DJju7/+FxP4H0QBE8YoDCf1OdzCzjwIXAn9nZkfN7CjwIbyrGAVAPTC7x4f+rvs+jDcSYEKXf2XOuSX9HHIJ3hWOc/3jPJl4wDm32Dn3cbyTrgN+OtiLdc414r1Ps/CGNLbhTcVJvL58vGJNt6f12MdJvBEpX8dLFJYMkMT1F/9hoKbH+1DpnLvJf7yeIf5MREREunLeNIyF+P2w8M453+lxzil13jQO/OH+Pwb+E/jXfqZXYl4/ib/FO/9N9PONFoaWb/SVHwx0bvsm3meR5/xcYz9eYSIxnaMeb/prIrZSvJENCYeBz/d4zSXO6xXWl8R0iC8BO/0P+/ijO/7BOXcp8FG8abO397OPM/r4GXTLN/Cm2PZ6Wo/bK4ApZnaVH1tfozMHjB/vfXi4x/tQ7py7G+89nGhm5V32o3xDMpIKEyIDcN60ihfxCgkTzWt+eF0fm5bjnWwawGtUydkTFWb2NTNLnFyb/W1jZna1mX3Ir8y34fWBiPWx/yK8oZQNQNTMPo/Xy2AoryEGPAXcZWZl/pzNgeYX3gG8AlyKN8f0Kv+1lOFNa1nnx/h985ovfYmzU1bAK9D8if+6zLxlR79gZpX9xLfJf12/BV72iwKY2cVm9ik/eQrhzffs673BzH5qZpf78VQCfwrsdc414c0JLfFjKMRbbaXPhKyHxXiJyR8wQKLQX/x4w2VPmdfAs9TM8v0YE1NMHsMr/kz0fzf+2xBiEhGRHGRm7/VHMszxb8/F+5D6lr/JfXjnlMv8x8eb2df87w3vA/SDeD2o6vF6DfSlEu9iRgNQYGb/E6+31VCs85/7Z/75+Ct0zw96uh2vJ9dVXf79AfAFM5uMN3rxi+Y17yzyt+1a9LgP+ImdbfI51c9J+rMUL3f6U7qc183sk2Z2hX/h4hTe1I5e+cYQfgabgevM7BwzGw/83QCxAOCPdH0Cr7/VJLz8a1jxA4/gvU83+rlGiXmNv+c45w7iTev4BzMrMrOPA18cLC6RIKgwITK4b+KdpKrxGlD+ec8NnNeL4V/xTsrHgCuANV02uRp428xa8eYO/sA5V4N3sv8NXrHiIN4QxW6rPPj7P43X5Okxf9tv0PccxP58H29ax1G85OQ/+9rIvOZWXwfu8Ud5JP7V4A11vMOf5/kVvOTmJN7cxufxl8tyzq3H6zNxrx/rXuBbg8S3BPg03U+0xcDdQKMf9zS8qRB9KcNryHkS74rLuXjDHPHncH4Xr3BQh1cAqu17N908izdy5Jhzbstw4/cLQl/ES7Rq/NfxW7whseAlWAf9x1bgvb8iIiJ9OY03Ku9tM2vD+zC8HfgrAOfc03ijCpeat8LUdryLCeDlD9Px+gw4vAbaf2hdVtvo4mW8CzK78c5RIXpPP+hTl/zgW3jn/1vwLoz0YmYfBuYBv+qRbzyLlzfc5pzbgVe0X4pXTDmNl4clluf8Bd65eoWZnfbfkw8NEF89Xp72UWBZl4dm4BUHTuFNl1iF92G/p8F+Bq/4+92K12zy+f5i6WExXg7xeI8puUOK33l9qr6ElyM14P28/oazn/O+4cd9Am/UzENDjEskrWyAKWYiIkNiZm8D9znn+ix4iIiIiIyGmVXgXYC40L9gIiJZRCMmRGTYzOwTZjbDH6p5B/A+4KWg4xIREZHsYWZf9KehluONKN1G/0uHi8gYlrLChJn9h5kdN7PtXe6bZGavmNke/+tE/34zs1+a2V4z22pmH0hVXCKSFBcDW/AaYv0V8FXXzzKnIiJBUj4iMqZ9CW950yN40ytvHWhFEREZu1I5YmIh8Lke9/0QWOmcuxBY6d8Gbw7chf6/O4FfpzAuERkl59wDzrnpftfn9znnfhd0TCIi/ViI8hGRMck59//6q0yMd87d4JzbFXRMIpIaKStMOOfexGuy0tWXgEX+94uAL3e5/yHneQuYYGYzUxWbiIiI5AblIyIiIpkv3T0mpieGe/tfp/n3z6Z7x99a/z4RERGRZFM+IiIikkEKgg7AZ33c1+f8MTO7E294JeXl5R9873vfm8q4RERExqQNGzY0OuemBh3HGKN8REREJEmGk4ukuzBxzMxmOufq/aGRx/37a4G5Xbabg9fkphfn3APAAwDz589369evT2W8IiIiY5KZHQw6hgymfERERCTFhpOLpHsqx7PAHf73dwDLu9x/u98N+8NAizr8i4iISIooHxEREckgKRsxYWZLgOuBKWZWC/wYuBt4zMz+CDgEfM3f/AXgJmAv0A78YariEhERkdyhfERERCTzpaww4Zy7rZ+HbuhjWwd8L1WxiIiISG5SPiIiIpL5MqX5pYiISNpEIhFqa2sJhUJBhzJqJSUlzJkzh8LCwqBDERERkWHIlnwkGbmIChMiIpJzamtrqaysZN68eZj1tRDD2OCco6mpidraWs4777ygwxEREZFhyIZ8JFm5SLqbX4qIiAQuFAoxefLkMZsEJJgZkydPHvNXWkRERHJRNuQjycpFVJgQEZGcNJaTgK6y5XWIiIjkomw4jyfjNagwISIiAvzkJz/hsssu433vex9XXXUVb7/99qj3+eyzz3L33XcnITqoqKhIyn5EREQkc+VqPqIeEyIikvPWrVvH888/z8aNGykuLqaxsZFwODyk50ajUQoK+j6dLliwgAULFiQzVBEREclSuZyPaMSEiIjkvPr6eqZMmUJxcTEAU6ZMYdasWcybN4/GxkYA1q9fz/XXXw/AXXfdxZ133slnP/tZbr/9dj70oQ+xY8eOM/u7/vrr2bBhAwsXLuT73/8+LS0tzJs3j3g8DkB7eztz584lEomwb98+Pve5z/HBD36Qa6+9lurqagBqamr4yEc+wtVXX82PfvSjNL4bIiIiEoRczkdUmBARkZz32c9+lsOHD3PRRRfx3e9+l1WrVg36nA0bNrB8+XIWL17MrbfeymOPPQZ4ScWRI0f44Ac/eGbb8ePHc+WVV57Z73PPPceNN95IYWEhd955J/fccw8bNmzgZz/7Gd/97ncB+MEPfsCf/umf8u677zJjxowUvGoRERHJJLmcj6gwISIiOa+iooINGzbwwAMPMHXqVG655RYWLlw44HMWLFhAaWkpAF//+td5/PHHAXjsscf42te+1mv7W265hWXLlgGwdOlSbrnlFlpbW1m7di1f+9rXuOqqq/jOd75DfX09AGvWrOG2224D4Jvf/GayXqqIiIhkqFzOR9RjQkREBMjPz+f666/n+uuv54orrmDRokUUFBScGe7Ycxms8vLyM9/Pnj2byZMns3XrVpYtW8b999/fa/8LFizg7/7u7zhx4gQbNmzgU5/6FG1tbUyYMIHNmzf3GVM2dOoWERGRocvVfEQjJkREJOft2rWLPXv2nLm9efNmzj33XObNm8eGDRsAePLJJwfcx6233sq//Mu/0NLSwhVXXNHr8YqKCq655hp+8IMfcPPNN5Ofn8+4ceM477zzzlzdcM6xZcsWAD72sY+xdOlSAB599NGkvE4RERHJXLmcj6gwISIiOa+1tZU77riDSy+9lPe9733s3LmTu+66ix//+Mf84Ac/4NprryU/P3/AfXz1q19l6dKlfP3rX+93m1tuuYVHHnmEW2655cx9jz76KA8++CBXXnkll112GcuXLwfgF7/4Bb/61a+4+uqraWlpSc4LFRERkYyVy/mIOedStvNUmz9/vlu/fn3QYYiIyBhTVVXFJZdcEnQYSdPX6zGzDc65+QGFlFOUj4iIyEhkUz4y2lxEIyZEREREREREJDAqTIiIiIiIiIhIYFSYEBEREREREZHAqDAhIiIiIiIiIoFRYUJEREREREREAqPChIiIiIiIiIgERoUJERGRDPHSSy9x8cUXc8EFF3D33XcHHY5Izmhra+Mv/uIvWLt2bdChiIgELoh8pCAtRxERERlDvv+X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\n",
      "text/plain": [
       "<Figure size 1296x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 年龄 && 船舱等级 && 性别 与存活与否的关系 Age && Pclass && Sex\n",
    "fig, ax = plt.subplots(1, 2, figsize = (18, 8))\n",
    "sns.violinplot(\"Pclass\", \"Age\", hue=\"Survived\", data=data, split=True, ax=ax[0])\n",
    "ax[0].set_title('Pclass and Age vs Survived')\n",
    "ax[0].set_yticks(range(0, 110, 10))\n",
    "\n",
    "sns.violinplot(\"Sex\", \"Age\", hue=\"Survived\", data=data, split=True, ax=ax[1])\n",
    "ax[1].set_title('Sex and Age vs Survived')\n",
    "ax[1].set_yticks(range(0, 110, 10))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x17b511d0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 按照年龄，将乘客划分为儿童、少年、成年和老年，分析四个群体的生还情况：\n",
    "\n",
    "bins = [0, 12, 18, 65, 100]\n",
    "data['Age_group'] = pd.cut(data['Age'], bins)\n",
    "by_age = data.groupby('Age_group')['Survived'].mean()\n",
    "by_age.plot(kind = 'bar')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x17bd2da0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 亲友的人数和存活与否的关系\n",
    "data['Family_Size'] = data['Parch'] + data['SibSp'] + 1\n",
    "data[['Family_Size','Survived']].groupby(['Family_Size']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 清洗数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先进行预处理\n",
    "# 提取标签，构造训练集标签 y_\n",
    "y_ = data.loc[:,'Survived']\n",
    "y_0 = y_.map(lambda x: 0 if x==1 else 1)\n",
    "y_1 = y_\n",
    "y_ = pd.concat([y_0, y_1], axis=1)\n",
    "# 重命名列名\n",
    "y_.columns = ['Dead','Survived']\n",
    "# 转换数据类型\n",
    "y_ = y_.astype('float32')\n",
    "# 获取 Numpy 格式的矩阵，便于 TensorFlow 处理\n",
    "y_ = y_.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 提取需要考虑的字段作为特征，构造训练集数据 x\n",
    "x = data.loc[:,['Name','Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>3.0</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.250000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>71.283302</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>3.0</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.925000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1.0</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53.099998</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>3.0</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.050000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>3.0</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.458300</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>1.0</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51.862499</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>3.0</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>21.075001</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>3.0</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11.133300</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>2.0</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>30.070801</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                Name  Pclass     Sex   Age  \\\n",
       "0                            Braund, Mr. Owen Harris     3.0    male  22.0   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...     1.0  female  38.0   \n",
       "2                             Heikkinen, Miss. Laina     3.0  female  26.0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)     1.0  female  35.0   \n",
       "4                           Allen, Mr. William Henry     3.0    male  35.0   \n",
       "5                                   Moran, Mr. James     3.0    male   NaN   \n",
       "6                            McCarthy, Mr. Timothy J     1.0    male  54.0   \n",
       "7                     Palsson, Master. Gosta Leonard     3.0    male   2.0   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)     3.0  female  27.0   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)     2.0  female  14.0   \n",
       "\n",
       "   SibSp  Parch       Fare Embarked  \n",
       "0    1.0    0.0   7.250000        S  \n",
       "1    1.0    0.0  71.283302        C  \n",
       "2    0.0    0.0   7.925000        S  \n",
       "3    1.0    0.0  53.099998        S  \n",
       "4    0.0    0.0   8.050000        S  \n",
       "5    0.0    0.0   8.458300        Q  \n",
       "6    0.0    0.0  51.862499        S  \n",
       "7    3.0    1.0  21.075001        S  \n",
       "8    0.0    2.0  11.133300        S  \n",
       "9    1.0    0.0  30.070801        C  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 清洗训练集数据前\n",
    "x.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 清洗数据\n",
    "# 将 Sex 列中的性别字符串替换为数字\n",
    "x['Sex'] = x['Sex'].replace(['female', 'male'],[0,1]).astype('int32')\n",
    "# 将 Embarked 出发地的字符替换为数字，同时将列中 NaN 值替换为 0\n",
    "x['Embarked'] = x['Embarked'].fillna('S')\n",
    "mapping = {'C':0,'Q':1,'S':2}\n",
    "x['Embarked'] = x['Embarked'].map(mapping)\n",
    "# 将 Fare 收入中为 NaN 的填充为中位数\n",
    "x['Fare'] = x['Fare'].fillna(x['Fare'].median())\n",
    "\n",
    "# 使用 随机森林 预测 Age 字段的缺失值\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "age = data[['Age','Survived','Fare','Parch','SibSp','Pclass']]\n",
    "age_notnull = age.loc[(data.Age.notnull())]\n",
    "age_isnull = age.loc[(data.Age.isnull())]\n",
    "X = age_notnull.values[:,1:]\n",
    "Y = age_notnull.values[:,0]\n",
    "rfr = RandomForestRegressor(n_estimators=1000,n_jobs=-1)\n",
    "rfr.fit(X,Y)\n",
    "predictAges = rfr.predict(age_isnull.values[:,1:])\n",
    "x.loc[(x.Age.isnull()),'Age'] = predictAges"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.250000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>71.283302</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.925000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53.099998</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.050000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>23.940416</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.458300</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51.862499</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>21.075001</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11.133300</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>30.070801</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                Name  Pclass  Sex        Age  \\\n",
       "0                            Braund, Mr. Owen Harris     3.0    1  22.000000   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...     1.0    0  38.000000   \n",
       "2                             Heikkinen, Miss. Laina     3.0    0  26.000000   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)     1.0    0  35.000000   \n",
       "4                           Allen, Mr. William Henry     3.0    1  35.000000   \n",
       "5                                   Moran, Mr. James     3.0    1  23.940416   \n",
       "6                            McCarthy, Mr. Timothy J     1.0    1  54.000000   \n",
       "7                     Palsson, Master. Gosta Leonard     3.0    1   2.000000   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)     3.0    0  27.000000   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)     2.0    0  14.000000   \n",
       "\n",
       "   SibSp  Parch       Fare  Embarked  \n",
       "0    1.0    0.0   7.250000         2  \n",
       "1    1.0    0.0  71.283302         0  \n",
       "2    0.0    0.0   7.925000         2  \n",
       "3    1.0    0.0  53.099998         2  \n",
       "4    0.0    0.0   8.050000         2  \n",
       "5    0.0    0.0   8.458300         1  \n",
       "6    0.0    0.0  51.862499         2  \n",
       "7    3.0    1.0  21.075001         2  \n",
       "8    0.0    2.0  11.133300         2  \n",
       "9    1.0    0.0  30.070801         0  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构造新的特征\n",
    "\n",
    "# 添加 Child 特征，<=16 的为小孩子，设为1，否则为0\n",
    "x['Child'] = x.Age.apply(lambda x: 1 if x<=16 else 0).astype('int32')\n",
    "\n",
    "# 添加 FamilySize 特征，表示家族大小\n",
    "x['FamilySize'] = x['SibSp'] + x['Parch'] + 1\n",
    "x['FamilySize'] = x['FamilySize'].astype('int32')\n",
    "\n",
    "# 添加 IsAlone 特征，表示是否独身一人。如果 FamilySize==1，则为1，否则为0\n",
    "x['IsAlone'] = x.FamilySize.apply(lambda x: 1 if x==1 else 0)\n",
    "\n",
    "# 添加 Age_bin 特征，划分年龄区间\n",
    "x['Age_bin'] = pd.cut(x['Age'], bins=[0,16,32,48,1200], \n",
    "                    labels=['Children','Teenage','Adult','Elder'])\n",
    "mapping = {'Children':0,'Teenage':1,'Adult':2,'Elder':3}\n",
    "x['Age_bin'] = x['Age_bin'].map(mapping)\n",
    "\n",
    "\n",
    "# 添加 Fare_bin 特征，划分收入区间\n",
    "x['Fare_bin'] = pd.cut(x['Fare'], bins=[-1,7.91,14.45,31,12000], \n",
    "                    labels=['Low_fare','median_fare','Average_fare','high_fare'])\n",
    "mapping = {'Low_fare':0,'median_fare':1,'Average_fare':2,'high_fare':3}\n",
    "x['Fare_bin'] = x['Fare_bin'].map(mapping)\n",
    "\n",
    "# 处理 Name 特征\n",
    "import re\n",
    "# Define function to extract titles from passenger names\n",
    "def get_title(name):\n",
    "    title_search = re.search(' ([A-Za-z]+)\\.', name)\n",
    "    # If the title exists, extract and return it.\n",
    "    if title_search:\n",
    "        return title_search.group(1)\n",
    "    return \"\"\n",
    "# Create a new feature Title, containing the titles of passenger names\n",
    "x['Title'] = x['Name'].apply(get_title)\n",
    "# Group all non-common titles into one single grouping \"Rare\"\n",
    "x['Title'] = x['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don', \n",
    "                                            'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')\n",
    "\n",
    "x['Title'] = x['Title'].replace('Mlle', 'Miss')\n",
    "x['Title'] = x['Title'].replace('Ms', 'Miss')\n",
    "x['Title'] = x['Title'].replace('Mme', 'Mrs')\n",
    "\n",
    "mapping = {\"Mr\": 1, \"Miss\": 2, \"Mrs\": 3, \"Master\": 4, \"Rare\": 5}\n",
    "x['Title'] = x['Title'].map(mapping)\n",
    "x['Title'] = x['Title'].fillna(0)\n",
    "\n",
    "# 丢弃无用字段\n",
    "x.drop([\"Name\", \"Age\", \"Fare\"], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Child</th>\n",
       "      <th>FamilySize</th>\n",
       "      <th>IsAlone</th>\n",
       "      <th>Age_bin</th>\n",
       "      <th>Fare_bin</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pclass  Sex  SibSp  Parch  Embarked  Child  FamilySize  IsAlone  Age_bin  \\\n",
       "0     3.0    1    1.0    0.0         2      0           2        0        1   \n",
       "1     1.0    0    1.0    0.0         0      0           2        0        2   \n",
       "2     3.0    0    0.0    0.0         2      0           1        1        1   \n",
       "3     1.0    0    1.0    0.0         2      0           2        0        2   \n",
       "4     3.0    1    0.0    0.0         2      0           1        1        2   \n",
       "5     3.0    1    0.0    0.0         1      0           1        1        1   \n",
       "6     1.0    1    0.0    0.0         2      0           1        1        3   \n",
       "7     3.0    1    3.0    1.0         2      1           5        0        0   \n",
       "8     3.0    0    0.0    2.0         2      0           3        0        1   \n",
       "9     2.0    0    1.0    0.0         0      1           2        0        0   \n",
       "\n",
       "   Fare_bin  Title  \n",
       "0         0      1  \n",
       "1         3      3  \n",
       "2         1      2  \n",
       "3         3      3  \n",
       "4         1      1  \n",
       "5         1      1  \n",
       "6         3      1  \n",
       "7         2      4  \n",
       "8         1      3  \n",
       "9         2      3  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 获取 Numpy 格式的矩阵，便于 TensorFlow 处理\n",
    "x = x.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 搭建神经网络（前向传播）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def input_placeholder(input_size, output_size):\n",
    "    # 输入占位符\n",
    "    x = tf.placeholder(dtype=tf.float32, shape=[None, input_size])\n",
    "    y_ = tf.placeholder(dtype=tf.float32, shape=[None, output_size])\n",
    "    keep_prob = tf.placeholder(tf.float32)\n",
    "\n",
    "    return x, y_, keep_prob\n",
    "\n",
    "def forward(x, w1, w2, b1, b2, keep_prob=1.0):\n",
    "    # 模型结构\n",
    "    # 定义一个多层感知机（MLP），最后加一个softmax归一化进行二分类\n",
    "    # 输入定义9个神经元，隐藏层定义100个神经元，输出层定义两个神经元（二分类），然后做一个softmax\n",
    "    \n",
    "    a = tf.matmul(x, w1) + b1\n",
    "    a = tf.nn.dropout(a, keep_prob=keep_prob)\n",
    "    a = tf.nn.relu(a)\n",
    "    y = tf.matmul(a, w2) + b2\n",
    "    return y\n",
    "\n",
    "def loss(y, y_):\n",
    "    # 交叉熵 损失\n",
    "    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))\n",
    "    return loss\n",
    "\n",
    "def accuary(y, y_):\n",
    "    # 预测准确率\n",
    "    correct_pred = tf.equal(tf.argmax(y_, 1),tf.argmax(y,1))\n",
    "    acc = tf.reduce_mean(tf.cast(correct_pred,tf.float32))\n",
    "    return acc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.训练（反向传播）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\workspace\\kaggle_titanic\\model.py:30: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See @{tf.nn.softmax_cross_entropy_with_logits_v2}.\n",
      "\n",
      "Train start...\n",
      "0 [9.189077, 0.3815937]\n",
      "400 [0.38240898, 0.83164984]\n",
      "800 [0.3624807, 0.8484849]\n",
      "1200 [0.358565, 0.8507295]\n",
      "1600 [0.3535985, 0.8529742]\n",
      "1999 [0.35061297, 0.8597082]\n",
      "Train end.\n",
      "Saving model...\n",
      "Save finally.\n"
     ]
    }
   ],
   "source": [
    "def Train():\n",
    "    global x, y_\n",
    "    # 训练过程\n",
    "    X, Y_ = x, y_\n",
    "    \n",
    "    # 模型\n",
    "    w1 = tf.Variable(tf.random_normal([input_size, hidden_size], stddev=1.0, seed=2.0))\n",
    "    w2 = tf.Variable(tf.random_normal([hidden_size, output_size], stddev=1.0, seed=2.0))\n",
    "    b1 = tf.Variable(tf.zeros([hidden_size]), name='bias1')\n",
    "    b2 = tf.Variable(tf.zeros([output_size]), name='bias2')\n",
    "\n",
    "    x, y_, keep_prob = model.input_placeholder(input_size, output_size)\n",
    "    y = model.forward(x, w1, w2, b1, b2, keep_prob=keep_prob)\n",
    "    loss = model.loss(y, y_)\n",
    "    y = tf.nn.softmax(y)\n",
    "    accuary = model.accuary(y, y_)\n",
    "\n",
    "    # 定义训练（反向传播）过程\n",
    "    train_op = tf.train.AdamOptimizer(learning_rate).minimize(loss)\n",
    "    \n",
    "    # tf saver\n",
    "    saver = tf.train.Saver()\n",
    "\n",
    "    with tf.Session() as sess:\n",
    "        # 变量初始化\n",
    "        init_op = tf.global_variables_initializer()\n",
    "        sess.run(init_op)\n",
    "\n",
    "        # 训练\n",
    "        print('Train start...')\n",
    "        for i in range(epoch):\n",
    "            for j in range(len(Y_) // BATCH_SIZE + 1):\n",
    "                start = j * BATCH_SIZE\n",
    "                end = start + BATCH_SIZE\n",
    "                # 反向传播\n",
    "                _, loss_result, y_result, acc_result = sess.run([train_op, loss, y, accuary], feed_dict={x:X[start:end], y_:Y_[start:end], keep_prob: KEEP_PROB})\n",
    "            # 输出每个 epoch 之后的 loss 和 准确率\n",
    "            if i%400==0 or i==0 or i+1==epoch:\n",
    "                print(i, sess.run([loss, accuary], feed_dict={x:X, y_:Y_, keep_prob: 1.0}))\n",
    "        print('Train end.')\n",
    "\n",
    "        # 保存模型到本地\n",
    "        print('Saving model...')\n",
    "        saver.save(sess, model_save_path)\n",
    "        print('Save finally.')\n",
    "        \n",
    "        \n",
    "Train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. 测试模型效果 && 生成提交结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入测试数据加载函数，处理方式和步骤3-5相似，详情请见代码\n",
    "from train import get_test_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./ckpt/model\n",
      "loss: 0.841927\n",
      "accuary: 0.8779904\n"
     ]
    }
   ],
   "source": [
    "# 定义测试过程 && 生成提交结果\n",
    "def Test():\n",
    "    # 测试\n",
    "    # 提取测试数据\n",
    "    X, Y_, PassengerId = get_test_data()\n",
    "\n",
    "    # 模型\n",
    "    w1 = tf.Variable(tf.random_normal([input_size, hidden_size], stddev=1.0, seed=2.0))\n",
    "    w2 = tf.Variable(tf.random_normal([hidden_size, output_size], stddev=1.0, seed=2.0))\n",
    "    b1 = tf.Variable(tf.zeros([hidden_size]), name='bias1')\n",
    "    b2 = tf.Variable(tf.zeros([output_size]), name='bias2')\n",
    "\n",
    "    x, y_, keep_prob = model.input_placeholder(input_size, output_size)\n",
    "    y = model.forward(x, w1, w2, b1, b2, keep_prob=keep_prob)\n",
    "    loss = model.loss(y, y_)\n",
    "    y = tf.nn.softmax(y)\n",
    "    accuary = model.accuary(y, y_)\n",
    "    y = tf.argmax(y, 1)\n",
    "\n",
    "    #保存模型对象saver\n",
    "    saver = tf.train.Saver()\n",
    "\n",
    "    with tf.Session() as sess:\n",
    "        # 变量初始化\n",
    "        saver.restore(sess, model_save_path)\n",
    "        loss, y, acc_result = sess.run([loss, y, accuary], feed_dict={x:X, y_:Y_, keep_prob: 1.0})\n",
    "        print('loss:',loss)\n",
    "        print('accuary:',acc_result)\n",
    "    \n",
    "    # 生成输出文件\n",
    "    # 准备输出数据\n",
    "    Survived = y.reshape((-1,1))\n",
    "    result = np.hstack((PassengerId, Survived))\n",
    "    result = pd.DataFrame(result, columns=['PassengerId', 'Survived'])\n",
    "    result.to_csv(output_file, sep=',', encoding='utf-8', index=False)\n",
    "\n",
    "# 清除默认图的堆栈，并设置全局图为默认图 \n",
    "tf.reset_default_graph() \n",
    "Test()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
